home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / SLAX 6.0.8 / slax-6.0.8.iso / slax / base / 006-devel.lzm / usr / include / rpm / rpmsx.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-10-22  |  6.6 KB  |  278 lines

  1. #ifndef H_RPMSX
  2. #define H_RPMSX
  3.  
  4. /** \ingroup rpmdep rpmtrans
  5.  * \file lib/rpmsx.h
  6.  * Structure(s) used for file security context pattern handling
  7.  */
  8.  
  9. #include <regex.h>
  10.  
  11. /**
  12.  */
  13. /*@-exportlocal@*/
  14. /*@unchecked@*/
  15. extern int _rpmsx_debug;
  16. /*@=exportlocal@*/
  17.  
  18. /**
  19.  */
  20. /*@-exportlocal@*/
  21. /*@unchecked@*/
  22. extern int _rpmsx_nopromote;
  23. /*@=exportlocal@*/
  24.  
  25. typedef /*@abstract@*/ /*@refcounted@*/ struct rpmsx_s * rpmsx;
  26. typedef struct rpmsxp_s * rpmsxp;
  27. typedef struct rpmsxs_s * rpmsxs;
  28.  
  29. #if defined(_RPMSX_INTERNAL)
  30. /**
  31.  * File security context regex pattern.
  32.  */
  33. struct rpmsxp_s {
  34. /*@only@*/ /*@relnull@*/
  35.     const char * pattern;    /*!< File path regex pattern. */
  36. /*@only@*/ /*@relnull@*/
  37.     const char * type;        /*!< File type string. */
  38. /*@only@*/ /*@relnull@*/
  39.     const char * context;    /*!< Security context. */
  40. /*@only@*/ /*@relnull@*/
  41.     regex_t * preg;        /*!< Compiled regex. */
  42.     mode_t fmode;        /*!< File type. */
  43.     int matches;
  44.     int hasMetaChars;
  45.     int fstem;            /*!< Stem id. */
  46. };
  47.  
  48. /**
  49.  * File/pattern stem.
  50.  */
  51. struct rpmsxs_s {
  52. /*@only@*/ /*@relnull@*/
  53.     const char * stem;
  54.     int len;
  55. };
  56.  
  57. /**
  58.  * File security context patterns container.
  59.  */
  60. struct rpmsx_s {
  61. /*@only@*/ /*@relnull@*/
  62.     rpmsxp sxp;            /*!< File context patterns. */
  63.     int Count;            /*!< No. of file context patterns. */
  64.     int i;            /*!< Current pattern index. */
  65. /*@only@*/ /*@relnull@*/
  66.     rpmsxs sxs;            /*!< File stems. */
  67.     int nsxs;            /*!< No. of file stems. */
  68.     int maxsxs;            /*!< No. of allocated file stems. */
  69.     int reverse;        /*!< Reverse traversal? */
  70. /*@refs@*/
  71.     int nrefs;            /*!< Reference count. */
  72. };
  73. #endif /* defined(_RPMSX_INTERNAL) */
  74.  
  75. #ifdef __cplusplus
  76. extern "C" {
  77. #endif
  78.  
  79. /**
  80.  * Unreference a security context patterns instance.
  81.  * @param sx        security context patterns
  82.  * @param msg
  83.  * @return        NULL always
  84.  */
  85. /*@unused@*/ /*@null@*/
  86. rpmsx rpmsxUnlink (/*@killref@*/ /*@only@*/ /*@null@*/ rpmsx sx,
  87.         /*@null@*/ const char * msg)
  88.     /*@modifies sx @*/;
  89.  
  90. /** @todo Remove debugging entry from the ABI. */
  91. /*@-exportlocal@*/
  92. /*@null@*/
  93. rpmsx XrpmsxUnlink (/*@killref@*/ /*@only@*/ /*@null@*/ rpmsx sx,
  94.         /*@null@*/ const char * msg, const char * fn, unsigned ln)
  95.     /*@modifies sx @*/;
  96. /*@=exportlocal@*/
  97. #define    rpmsxUnlink(_sx, _msg)    XrpmsxUnlink(_sx, _msg, __FILE__, __LINE__)
  98.  
  99. /**
  100.  * Reference a security context patterns instance.
  101.  * @param sx        security context patterns
  102.  * @param msg
  103.  * @return        new security context patterns reference
  104.  */
  105. /*@-exportlocal@*/
  106. /*@unused@*/ /*@newref@*/ /*@null@*/
  107. rpmsx rpmsxLink (/*@null@*/ rpmsx sx, /*@null@*/ const char * msg)
  108.     /*@modifies sx @*/;
  109.  
  110. /** @todo Remove debugging entry from the ABI. */
  111. /*@newref@*/ /*@null@*/
  112. rpmsx XrpmsxLink (/*@null@*/ rpmsx sx, /*@null@*/ const char * msg,
  113.         const char * fn, unsigned ln)
  114.         /*@modifies sx @*/;
  115. /*@=exportlocal@*/
  116. #define    rpmsxLink(_sx, _msg)    XrpmsxLink(_sx, _msg, __FILE__, __LINE__)
  117.  
  118. /**
  119.  * Destroy a security context patterns.
  120.  * @param sx        security context patterns
  121.  * @return        NULL always
  122.  */
  123. /*@-exportlocal@*/
  124. /*@null@*/
  125. rpmsx rpmsxFree(/*@killref@*/ /*@only@*/ /*@null@*/ rpmsx sx)
  126.     /*@modifies sx@*/;
  127. /*@=exportlocal@*/
  128.  
  129. /**
  130.  * Parse selinux file security context patterns.
  131.  * @param sx        security context patterns
  132.  * @param fn        file name to parse
  133.  * @return        0 on success
  134.  */
  135. /*@-exportlocal@*/
  136. int rpmsxParse(rpmsx sx, /*@null@*/ const char *fn)
  137.     /*@globals rpmGlobalMacroContext, h_errno, fileSystem @*/
  138.     /*@modifies sx, rpmGlobalMacroContext, h_errno, fileSystem @*/;
  139. /*@=exportlocal@*/
  140.  
  141. /**
  142.  * Create and load security context patterns.
  143.  * @param fn        security context patterns file name
  144.  * @return        new security context patterns
  145.  */
  146. /*@null@*/
  147. rpmsx rpmsxNew(const char * fn)
  148.     /*@globals rpmGlobalMacroContext, h_errno, fileSystem @*/
  149.     /*@modifies rpmGlobalMacroContext, h_errno, fileSystem @*/;
  150.  
  151. /**
  152.  * Return security context patterns count.
  153.  * @param sx        security context patterns
  154.  * @return        current count
  155.  */
  156. int rpmsxCount(/*@null@*/ const rpmsx sx)
  157.     /*@*/;
  158.  
  159. /**
  160.  * Return security context patterns index.
  161.  * @param sx        security context patterns
  162.  * @return        current index
  163.  */
  164. int rpmsxIx(/*@null@*/ const rpmsx sx)
  165.     /*@*/;
  166.  
  167. /**
  168.  * Set security context patterns index.
  169.  * @param sx        security context patterns
  170.  * @param ix        new index
  171.  * @return        current index
  172.  */
  173. int rpmsxSetIx(/*@null@*/ rpmsx sx, int ix)
  174.     /*@modifies sx @*/;
  175.  
  176. /**
  177.  * Return current pattern.
  178.  * @param sx        security context patterns
  179.  * @return        current pattern, NULL on invalid
  180.  */
  181. /*@-exportlocal@*/
  182. /*@observer@*/ /*@null@*/
  183. extern const char * rpmsxPattern(/*@null@*/ const rpmsx sx)
  184.     /*@*/;
  185. /*@=exportlocal@*/
  186.  
  187. /**
  188.  * Return current type.
  189.  * @param sx        security context patterns
  190.  * @return        current type, NULL on invalid/missing
  191.  */
  192. /*@-exportlocal@*/
  193. /*@observer@*/ /*@null@*/
  194. extern const char * rpmsxType(/*@null@*/ const rpmsx sx)
  195.     /*@*/;
  196. /*@=exportlocal@*/
  197.  
  198. /**
  199.  * Return current context.
  200.  * @param sx        security context patterns
  201.  * @return        current context, NULL on invalid
  202.  */
  203. /*@-exportlocal@*/
  204. /*@observer@*/ /*@null@*/
  205. extern const char * rpmsxContext(/*@null@*/ const rpmsx sx)
  206.     /*@*/;
  207. /*@=exportlocal@*/
  208.  
  209. /**
  210.  * Return current regex.
  211.  * @param sx        security context patterns
  212.  * @return        current context, NULL on invalid
  213.  */
  214. /*@-exportlocal@*/
  215. /*@observer@*/ /*@null@*/
  216. extern regex_t * rpmsxRE(/*@null@*/ const rpmsx sx)
  217.     /*@*/;
  218. /*@=exportlocal@*/
  219.  
  220. /**
  221.  * Return current file mode.
  222.  * @param sx        security context patterns
  223.  * @return        current file mode, 0 on invalid
  224.  */
  225. /*@-exportlocal@*/
  226. extern mode_t rpmsxFMode(/*@null@*/ const rpmsx sx)
  227.     /*@*/;
  228. /*@=exportlocal@*/
  229.  
  230. /**
  231.  * Return current file stem.
  232.  * @param sx        security context patterns
  233.  * @return        current file stem, -1 on invalid
  234.  */
  235. /*@-exportlocal@*/
  236. extern int rpmsxFStem(/*@null@*/ const rpmsx sx)
  237.     /*@*/;
  238. /*@=exportlocal@*/
  239.  
  240. /**
  241.  * Return next security context patterns iterator index.
  242.  * @param sx        security context patterns
  243.  * @return        security context patterns iterator index, -1 on termination
  244.  */
  245. /*@-exportlocal@*/
  246. int rpmsxNext(/*@null@*/ rpmsx sx)
  247.     /*@modifies sx @*/;
  248. /*@=exportlocal@*/
  249.  
  250. /**
  251.  * Initialize security context patterns iterator.
  252.  * @param sx        security context patterns
  253.  * @param reverse    iterate in reverse order?
  254.  * @return        security context patterns
  255.  */
  256. /*@-exportlocal@*/
  257. /*@null@*/
  258. rpmsx rpmsxInit(/*@null@*/ rpmsx sx, int reverse)
  259.     /*@modifies sx @*/;
  260. /*@=exportlocal@*/
  261.  
  262. /**
  263.  * Find file security context from path and type.
  264.  * @param sx        security context patterns
  265.  * @param fn        file path
  266.  * @param fmode        file mode
  267.  * @return        file security context
  268.  */
  269. /*@owned@*/ /*@null@*/
  270. const char * rpmsxFContext(/*@null@*/ rpmsx sx, const char * fn, mode_t fmode)
  271.     /*@modifies sx @*/;
  272.  
  273. #ifdef __cplusplus
  274. }
  275. #endif
  276.  
  277. #endif    /* H_RPMSX */
  278.